Transfer Family を使用して SFTP 経由でファイルを EFS に直接アップロードしてみた(VPCインターネット向け-鍵認証のみ編)
こんにちは!AWS事業本部のおつまみです。
皆さん、Transfer Family を使用して SFTP 経由でファイルを EFS に直接アップロードしたいなぁと思ったことはありますか?私はあります。
Transfer Family は、AWS ストレージサービスとの間でファイルを送受信できる安全な転送サービスです。主にこれら4つの要素を選択し、構築します。
- プロトコル
- SFTP (SSH ファイル転送プロトコル) - Secure Shell 経由のファイル転送
- AS2 (Applicability Statement 2) - ビジネス間データ交換用のメッセージングプロトコル情報
- FTPS (File Transfer Protocol Secure) - TLS 暗号化を使用したファイル転送プロトコル
- FTP (File Transfer Protocol) - 暗号化されていないファイル転送プロトコル
- ID プロバイダー
- サービスマネージド - サービス内でユーザーを作成および管理
- AWS Directory Service情報 - AWS Managed AD でユーザーを有効にする、またはオンプレミス環境または AWS で独自のセルフマネージド AD を使用する
- カスタム ID プロバイダー - 情報任意の ID プロバイダーとの統合によりユーザーを管理する
- エンドポイント
- パブリックアクセス - インターネット経由でアクセス可能
- VPC(内部) - セキュリティグループを使用したアクセスコントロール可能、VPC内のリソースからのみアクセスする場合
- VPC(インターネット) - セキュリティグループを使用したアクセスコントロール可能、VPC外からアクセスする場合
- ドメイン
- Amazon S3
- Amazon EFS
今回は以下を選択した構築方法の作業手順をご紹介します。
- プロトコル
- SFTP (SSH ファイル転送プロトコル) - Secure Shell 経由のファイル転送
- ID プロバイダー
- サービスマネージド - サービス内でユーザーを作成および管理
- エンドポイント
- VPC(インターネット) - セキュリティグループを使用したアクセスコントロール可能、VPC外からアクセスする場合
- ドメイン
- Amazon EFS
構成図
今回構築するアーキテクチャの構成図です。
ID管理はサービスマネージドを選択しているため、Transfer Familyでユーザーを作成および管理をします。 また不正にアクセスされないようセキュリティグループでIP制限を行います。
作業手順
0. 事前準備 鍵の作成
今回、SFTPプロトコルを使用してTransfer Familyと通信するため、あらかじめSSHキーを作成しておきます。
お使いのPCに合わせて作成して下さい。
私はMacを使用しているため、ssh-keygen
コマンドでSSHキーペアを作成しました。
o2mami% ssh-keygen -t rsa -b 4096 -N "" -f test_transferfamily-key Generating public/private rsa key pair. Your identification has been saved in test_transferfamily-key Your public key has been saved in test_transferfamily-key.pub The key fingerprint is: SHA256:Gf32lItve2epdtEKyhjBHLg9poppse+Dg9RcfLUNQ48 o2mami The key's randomart image is: +---[RSA 4096]----+ | ... | | . .=o | | . =oE*. | | o..B+ o . | | o . .oSo o o .| | ..o . . ..+ o.| |.. * . + ...o.o| |. B o . o ooo+| | . +o. .o=+.| +----[SHA256]-----+
1. VPCの作成
まずはじめにVPCを作成します。VPCサービスから[VPCを作成]を選択します。
[VPCなど]を選択し、任意のVPC名とIPv4 CIDRブロックを割り当てます。
- 名前:
test-transferfamily-vpc
(任意の名前) - IPv4 CIDRブロック:
10.0.0.0/28
(任意)
パブリックサブネットのみ必要であるため、[パブリックサブネットの数]は1、その他はなしで作成します。
2. EIPの作成
次にTransfer Familyのエンドポイントに割り当てるEIPを作成します。EC2サービスから左側のナビゲーションペインの[Elastic IP]を選択します。
[Elastic IP アドレスを割り当てる]を選択します。
以下を選択し、[割り当て]を押下します。
- ネットワークボーダーグループ:
ap-northeast-1
- パブリックIPv4アドレスプール:
AmazonのIPv4アドレスプール
- タグ:Name:
test-transferfamily-eip
(任意の名前)
下記画面のように「Elastic IPアドレス」が発行されていれば、OKです。
3. セキュリティグループの作成
次にTransfer Familyのエンドポイントに割り当てるセキュリティグループを作成します。
- セキュリティグループ名:
test-transferfamily-sg
(任意の名前) - 説明:
test-transferfamily-sg
(任意の名前) - インバウンドルール: プロトコルタイプ
SSH
、ソースMy IP
ソースはお使いする環境に併せて設定して下さい。ただし安易に0.0.0.0/0
を許可するのはやめましょう。
設定後任意でタグを追加します。 追加後、[セキュリティグループを作成]を選択します。
- タグ:Name:
test-transferfamily-sg
(任意の名前)
4. EFSの作成
次にEFSを作成します。EFSサービスから、[ファイルシステムの作成]を選択します。
自動バックアップなどの他設定をカスタマイズしたい場合は、[カスタマイズ]を選択します。
今回はこのまま設定を行い、[作成]を選択します。
- 名前:
test-transferfamily-efs
(任意の名前) - VPC:
test-transferfamily-vpc
(1で作成したVPC) - ストレージクラス:
標準
5. IAMの作成
次にTransfer Familyのユーザーに付与するIAMロールを作成します。
このIAMロールでは、EFSへアクセスするための権限を付与します。
IAMサービスから、[ロール]を選択します。
[ロールを作成]を選択します。
設定ステップ 1 : 信頼されたエンティティを選択
以下を選択し、[次へ]を選択します。
- 信頼されたエンティティの種類: AWSのサービス
- ユース ケース: Transfer
ステップ 2 : 許可を追加
以下を選択し、[次へ]を選択します。
- 許可ポリシー: AmazonElasticFileSystemClientFullAccess
※(補足)今回は接続のためのフルアクセス権限を付与しましたが、作成したリソースのみを指定する場合はリソースポリシーは以下のように設定します。
file-system-idは[4. EFSの作成]で作成したEFSのファイルIDfs-xxxxxxx
を指定します。
{ "Version": "2012-10-17", "Statement": [ { "Sid": "RootFileSystemAccess", "Effect": "Allow", "Action": [ "elasticfilesystem:ClientRootAccess", "elasticfilesystem:ClientMount", "elasticfilesystem:ClientWrite" ], "Resource": "arn:aws:elasticfilesystem:<region>:<account-id>:file-system/<file-system-id>" } ] }
ステップ 3 : 名前付け、確認、作成
- ロール名: test-transferfamily-role
(任意の名前)
任意でタグを追加し、[ロールを作成]を選択します。
- タグ:Name: test-transferfamily-role
(任意の名前)
6. TransferFamilyの作成
最後にTransfer Familyを作成します。
Transfer Familyサービスから、[サーバを作成]を選択します。
ステップ 1:プロトコルを選択
SFTP
を選択し、[次へ]を選択します。
ステップ 2:IDプロバイダーを選択
カスタムマネージド
を選択し、[次へ]を選択します。
ステップ 3:エンドポイントを選択
VPCでホスト
、インターネット向け
を選択します。
以下を選択し、[次へ]を選択します。
- アベイラビリティ ゾーン:
EIPを作成したアベイラビリティゾーン
- セキュリティグループ:
作成したセキュリティグループ
※defaultがあらかじめ設定されていますが、削除します。
ステップ 4:ドメインを選択
EFS
を選択し、[次へ]を選択します。
ステップ 5:追加の詳細を設定 ここではログ記録や暗号化アルゴリズムなどの追加オプションを設定します。今回はこのまま、[次へ]を選択します。
ステップ 6:確認と作成 設定内容を確認し、[サーバを作成]を選択します。
2~3分ほどでサーバが作成されます。状態がオンラインに変わるのを待ってから、[ユーザーを追加]を選択します。
6. 接続ユーザーの作成
以下のようにユーザー設定をします。
- ユーザー名:
test-transferfamily-user
(任意の名前) - ユーザー ID:
0
(オプション: 0 に設定すると、ルートアクセスになります) - グループ ID:
0
(オプション: 0 に設定すると、ルートアクセスになります) - ロール:
test-transferfamily-role
(作成したIAM) - ホームディレクトリ:
test-transferfamily-efs
(作成したEFS)
※オプションフォルダに[ユーザー名]が指定されますが、削除して下さい。初回接続はまだフォルダを作成していないため接続できません。
以下を設定し、[追加]を選択します。
- SSHパブリックキー:
はじめに作成したSSHの公開鍵を貼り付け
(※改行などが入らないように気を付けて下さい。) - タグ:Name:
test-transferfamily-user
(任意の名前)
ユーザーが追加されたことを確認できました。
接続に必要なエンドポイント名を控えておきます。
接続してみた
最後に接続できるか確認してみます。
今回はSFTPクライアントソフトとしてCyberduckを使用して接続してみます。
- プロトコル:
SFTP
- サーバ:
s-xxxxxxx.amazonaws.com
(TransferFamilyのエンドポイント) - ポート:
22
- ユーザー名:
test-transferfamily-user
(作成したユーザー名) - SSH Private Key:
test-transferfamily-key
(作成した秘密鍵)
はじめて接続する場合はこのような画面が表示されます。[許可]を選択します。
問題なく接続できました!
ファイルのアップロードもダウンロードも問題なくできました。
(補足)ユーザー作成でIAMロールを指定したように、IAMでアクセス権限を付与しています。 そのためフォルダへの細かいアクセス制限はIAMポリシーで実現可能です。
リソースの削除
検証後は作成したリソースを削除しましょう。
特にTransfer Familyはサーバ停止しても、料金が発生してしまいます。
こちらの順番で削除すると、削除時にエラーが発生せず、スムーズに削除できます。
- Transfer Familyの削除
- EFSの削除
- EIPの解放
- セキュリティグループの削除
- VPCの削除
- IAMロールの削除
最後に
今回はTransfer Family を使用して SFTP 経由でファイルを EFS に直接アップロードしてする方法をご紹介しました。
EC2にマウントしていないEFSに直接ファイルをアップロードする方法の記事があまりなかったため、今回記事にしました。
どなたかのお役に立てれば幸いです。 最後までお読みいただきありがとうございました!
以上、おつまみ(@AWS11077)でした!
関連記事
[アップデート] AWS Transfer Family の対象ストレージに Amazon EFS が追加サポートされました | DevelopersIO
วิธีอัปโหลดไฟล์โดยตรงไปยัง EFS ด้วย Transfer Family ผ่าน SFTP | DevelopersIO
【2022年10月版】AWS Transfer Family の SFTP を使ってみた | DevelopersIO
AWS Transfer Family のSFTPをパスワード方式で接続してみた(IP制限有り) | DevelopersIO